30|如何解耦代码

解耦为何重要

人处理复杂性的能力有限 -> 通过解耦的手段来保证代码不至于复杂到无法控制的地步。

高内聚、低耦合

  1. 代码结构清晰
  2. 分层和模块化合理
  3. 依赖关系简单
  4. 模块或类之间耦合小

如何判定代码需要解耦

  1. 修改代码牵一发而动全身
  2. 类与类之间的关系过于复杂

如何给代码解耦

  1. 封装与抽象
    封装与抽象可以有效的屏蔽实现的复杂性,隔离易变性,给依赖的模块提供稳定且易用的抽象接口。

  2. 中间层
    引入中间层进行过渡

  3. 模块化

合理划分模块进行解耦代码,提高代码的可读性与可维护性,每个模块只提供封装了内部实现细节的接口给其他模块使用。

  1. 其他设计思想与原则
  • 单一职责原则

高内聚的代码会使代码更加松耦合,而实现高内聚的指导原则就是单一职责原则。类设计功能单一,那么依赖的类就比较少,耦合也降低了。

  • 基于接口而非实现编程

通过接口这样的中间层去隔离变化与具体的实现,这样的话互相依赖的类或者模块,一个类的改动不会影响另一个类或者模块。把一种强耦合(强依赖)的关系降成了松耦合(弱依赖)的关系

  • 依赖注入

依赖注入将代码之间的强耦合变成弱耦合,耦合关系没那么紧密,做到容易替换插拔。

  • 多用组合少用继承

继承是一种强耦合关系,父类与子类高度耦合,容易牵一发而动全身;组合是一种弱依赖的关系,更加的灵活。

  • 迪米特法则

不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口,实现代码的松耦合。